package list;
/**
 * NodoDoble.java
 * @author Jorge Lainfiesta 11142 Sección 20
 * @since 11/08/2012
 * @version 1
 * @param <E> Tipo de objetos que utiliza esta clase
 * Basado en código de Java Structures de Duan y Baily
 */

public class NodoDoble<E> {

    private E data;
    private NodoDoble<E> nextElement;
    private NodoDoble<E> previousElement;
    /**
     * Constructor con anterior y posterior
     * @param v
     * @param next
     * @param previous 
     */
    public NodoDoble(E v, NodoDoble<E> next, NodoDoble<E> previous){
        data = v;
            nextElement = next;
            if (nextElement != null)
                nextElement.previousElement = this;
            previousElement = previous;
            if (previousElement != null)
                previousElement.nextElement = this;
    }
    
    /**
     * Constructor para una nueva estructura
     */
    public NodoDoble(E v){
        this(v, null, null);
    }
    
    /**
     * Retorna el siguiente nodo
     * @return Siguiente nodo
     */
    public NodoDoble<E> next(){
        return nextElement;
    }
    /**
     * Retorna el nodo anterior
     * @return Nodo anterior
     */
    public NodoDoble<E> previous(){
        return previousElement;
    }
    /**
     * Retorna el valor del nodo
     * @return Valor del nodo
     */
    public E value(){
        return data;
    }
   
    /**
     * Fija el siguiente nodo
     * @param next 
     */
    public void setNext(NodoDoble<E> next){
        nextElement = next;
    }
    /**
     * Fija el nodo anterior
     * @param Nodo anterior
     */
    public void setPrevious(NodoDoble<E> prev){
        previousElement = prev;
    }
    /**
     * Fija el valor del nodo
     * @para Valor del nodo
     */
    public void value(E value){
        data = value;
    }

}
